#coding=utf-8

import pandas as pd

# 代码说明：
# 智能日期转换：
#
# 使用 pd.to_datetime() 自动识别各种日期格式
#
# 支持处理：2017/4/1、2017-04-01、Apr 2017 等多种格式
#
# 自动处理 Excel 内部日期序列值（如 42826 表示 2017-04-01）
#
# 格式统一：
#
# 使用 strftime('%Y-%m') 确保输出格式为 YYYY-MM
#
# 月份自动补零：4月 → 04
#
# 错误处理：
#
# 无法转换的值保留原样
#
# 自动跳过空值（NaN）
#
# 处理效果示例：
# 原始值	转换结果
# 2017/4/1 0:00:00	2017-04
# 42826 (Excel序列值)	2017-04
# April 2017	2017-04
# 2017-04-01	2017-04
# 2025/12/15	2025-12
# 无效日期	无效日期 (保留原样)
# 高级选项：
# 如果需要更严格的处理（如仅转换有效日期），可以修改 convert_date 函数：
#
# python
# def convert_date(date_val):
#     try:
#         dt = pd.to_datetime(date_val)
#         # 验证是否是有效日期（可选）
#         if dt.year < 1900 or dt.year > 2100:
#             return date_val  # 超出范围的年份保持原样
#         return dt.strftime('%Y-%m')
#     except:
#         return date_val
# 注意事项：
# 对于大文件（>10MB），添加参数提高性能：
#
# python
# pd.read_excel(..., engine='openpyxl')
# 如果日期列包含混合格式，所有有效日期都会被标准化
#
# 转换后列的数据类型将变为字符串（object）
#
# 原始时间部分（0:00:00）会被自动丢弃
#
# 此代码可以完美处理 Excel 中各种常见的日期时间格式，并将它们统一转换为 YYYY-MM 的标准格式。
def convert_excel_date_format(input_file, output_file, date_column):
    # 读取Excel文件
    df = pd.read_excel(input_file)

    # 转换日期格式的函数
    def convert_date(date_val):
        try:
            # 尝试将值转换为Pandas的datetime对象
            dt = pd.to_datetime(date_val)
            # 格式化为"YYYY-MM"格式
            return dt.strftime('%Y-%m')
        except:
            # 如果转换失败，返回原始值
            return date_val

    # 应用转换函数到指定列
    df[date_column] = df[date_column].apply(convert_date)

    # 保存结果
    df.to_excel(output_file, index=False)
    print(f"转换完成！已保存到 {output_file}")


if __name__ == '__main__':
    # 使用示例
    convert_excel_date_format(
        input_file=r"E:\项目相关\13.可再生能源补贴\26.补贴项目功能扩展三期\13.数据对接\可再生数据 2\国网数据处理\python20250617\non_matched1.xlsx",  # 输入文件名
        output_file=r"E:\项目相关\13.可再生能源补贴\26.补贴项目功能扩展三期\13.数据对接\可再生数据 2\国网数据处理\python20250617\non_matched2.xlsx",  # 输出文件名
        date_column="PID_START_TM"  # 要转换的日期列名
    )